#include "ConfigUtil.h"
#include <glib.h>

ConfigUtil::ConfigUtil(/* args */)
{
}

ConfigUtil::~ConfigUtil()
{
}

map<string, string> ConfigUtil::paraConfig(string path, string groupName)
{
    //创建GKeyFile
    GKeyFile *keyFile=g_key_file_new();

    //加载配置文件
    bool flag=g_key_file_load_from_file(keyFile,path.c_str(),G_KEY_FILE_NONE,NULL);
    map<string,string> resMap;
    if (!flag)
    {
        g_log("解析文件",G_LOG_LEVEL_WARNING,"文件解析失败");
        return resMap;
    }

    //获取配置文件文件中所有的key，根据key获取value
    gchar **keys=g_key_file_get_keys(keyFile,groupName.c_str(),0,NULL);
    for (gchar** key=keys; *key!=NULL; key++)
    {
        string keyStr=string(*key);
        gchar *value=g_key_file_get_value(keyFile,groupName.c_str(),*key,NULL);
        string valueStr=string(value);
        resMap[keyStr]=valueStr;
    }
    return resMap;
}

void ConfigUtil::updateValue(string path, string groupName, string key, string value)
{
    //创建GKeyFile
    GKeyFile *keyFile=g_key_file_new();

    //加载配置文件
    bool flag=g_key_file_load_from_file(keyFile,path.c_str(),G_KEY_FILE_NONE,NULL);
    if (!flag)
    {
        cout<<"配置文件加载失败"<<endl;
        return;
    }
    //修改key和value
    g_key_file_set_value(keyFile,groupName.c_str(),key.c_str(),value.c_str());

    //保存修改后的内容
    gboolean afterFlag=g_key_file_save_to_file(keyFile,path.c_str(),NULL);
    if (!afterFlag)
    {
        cout<<"文件保存失败"<<endl;
    }
    //关闭文件
    g_key_file_free(keyFile);
}
